package object05;

/**
 * 所有的类都默认继承Object
 * 由于equals方法比较两个对象的地址值没有任何意义
 * 因此我们通过比较两个对象中的属性值
 * 如果两个对象中的属性值完全相同,那么equals方法返回true
 * 如果两个对象中至少有一个属性不同,equals返回false
 * 例如:
 *   Person 如果两个Person对象的姓名和年龄均相同,那么equals方法返回true
 *   如果两个Person对象中至少有一个属性不同,equals返回false
 */
public class Person /*extends Object*/ {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {//Object obj=a=new Animal();
                                       //父类引用指向子类对象 多态

        if (this == obj) { //this=p2
                           //obj=p2
                           //p2==p2 true
            return true;   //直接return true,如果是同一个人,我们就不走下面的比较姓名和年龄代码
                         //提高代码效率
        }


        if(!(obj instanceof Person)){//如果obj引用指向的对象不是Person类的对象
                                   //那么我们就return false
            return false;
        }

        Person p=(Person)obj;

        return this.age == p.age && this.name.equals(p.name);
    }
}
